package com.example.demo.sf;

/**
 * 杨辉三角
 */
public class YangHuiSanJiao {

    public static void main(String[] args) {
        test(5);
    }
    /**
     *  一维数组实现
     *  比如这个
     *         1   
     *       1   1   
     *     1   2   1   
     *   1   3   3   1   
     * 1   4   6   4   1
     * 
     *假如现在我知道了某一行，那么下一行就可以通过上一行来计算了
     * 例如 1   3   3   1   下一行是 1   4   6   4   1
     * 下一行会多出一个值 默认为0，而实际值就是 最后一个值加上当前值 0+1=1  就是第五行的最后一个值   1+3=4 就是的第五行的倒数第二个值
     * 一直到第0个值就是固定的1
     *
     */
    private static void creatRow(int[] row,int i) {
        if(i ==0 ){
           row[0] = 1;
           return;
        }
        for (int j = i; j > 0; j--){
            row[j] = row[j]+row[j-1];
        }

    }

    private static void test(int n) {
        // 创建一个数组
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            creatRow(arr, i);
            printSpace(n, i);
            for (int j = 0; j <= i; j++) {
                String format = String.format("%-4d", arr[j]);
                System.out.print(format);
            }
            System.out.println();
        }

        
    }

    /**
     * 二维数组实现
     */
    private static void test1(int n) {
        int[][] arr = new int[n][n];
        for (int i = 0; i < n; i++) {
            printSpace(n, i);
            for (int j = 0; j <= i; j++) {
                if (j == 0 || j == i) {
                    arr[i][j] = 1;
                } else {
                    arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
                }
                String format = String.format("%-4d", arr[i][j]);
                System.out.print(format);
            }
            System.out.println();
        }
    }

    /**
     * 打印空格，让杨辉三角居中
     * 空格数 = (n-1-i) * 2
     */
    private static void printSpace(int n,int i) {
        int num = (n-1-i) * 2;
        for (int j = 0; j < num; j++) {
            System.out.print(" ");
        }
    }
}
